'use strict';
const dayjs = require("dayjs");
const getNumberValue = function (value) {
    let numberValue = Number(value);
    return isNaN(numberValue) ? 0 : numberValue;
}
module.exports = app => {
    const { INTEGER, DATE, STRING, DECIMAL, TINYINT, TEXT } = app.Sequelize;
    const OfficeBuilding = app.model.define(
        'OfficeBuilding',
        {
            id: { type: INTEGER, primaryKey: true, autoIncrement: true },
            // 模板ID
            template_id: INTEGER,
            // 楼盘名称
            template_name: STRING,
            // 发布类型 (传统写字楼/联合办公)
            publish_type: STRING,
            // 租售方式 (出租/出售)
            rent_type: STRING,
            // 写字楼类型
            building_type: STRING,
            // 可注册公司
            can_register: { type: TINYINT, defaultValue: 0 },
            // 写字楼性质 (新房/二手房)
            property_nature: STRING,
            // 写字楼名称
            building_name: STRING,
            // 区域板块 (区域/板块)
            district: JSON,
            // 区域板块文本
            district_label: STRING,
            // 写字楼地址
            address: STRING,
            // 楼栋/塔号
            building_number: STRING,
            // 所在楼层
            floor: INTEGER,
            // 总楼层
            total_floors: INTEGER,
            // 房间号
            room_number: STRING,
            // 建筑面积
            area: {
                type: DECIMAL(10,2),
                get() {
                    return getNumberValue(this.getDataValue('area'))
                }
            },
            // 得房率
            efficiency: DECIMAL(5,2),
            // 装修情况 (毛坯/简装/精装修/豪华装修)
            decoration: STRING,
            // 可分割
            can_divide: { type: TINYINT, defaultValue: 0 },
            // 配套设施 (多选)
            facilities: STRING,
            // 房源标签 (多选)
            tags: STRING,
            // 产权 (开发商持有/个人持有/公司持有/其他)
            property_rights: STRING,
            post_url: TEXT,
            image_url: {
                type: TEXT,
                get() {
                    const rawValue = this.getDataValue('image_url');
                    // 判断是否为json数组字符串
                    if (typeof rawValue === 'string' && rawValue.startsWith('[') && rawValue.endsWith(']')) {
                        return  JSON.parse(rawValue)
                    }
                    return [];
                },
                set(value) {
                    this.setDataValue('image_url', Array.isArray(value) ? JSON.stringify(value) : '[]');
                }
            },
            video_url: TEXT,
            // 业务信息
            // 业务姓名
            business_name: STRING,
            // 业务电话
            business_phone: STRING,
            remark: STRING,
            // 保密备注
            secret_remark: STRING,
            lat:STRING,
            lng:STRING,
            price_type: STRING,
            price: {
                type: DECIMAL(10,2),
                get() {
                    return getNumberValue(this.getDataValue('price'))
                }
            },
            day_price: {
                type: DECIMAL(10,2),
                get() {
                    return getNumberValue(this.getDataValue('day_price'))
                }
            },
            is_property_fee: { type: TINYINT, defaultValue: 0 },
            lease_count: INTEGER,
            free_lease_count: INTEGER,
            payment_count: INTEGER,
            deposit_count: INTEGER,
            // 开发商
            developer: STRING(100),
            // 物业公司
            property_company: STRING(100),
            // 物业费
            property_fee: {
                type: DECIMAL(10,2),
                get() {
                    return getNumberValue(this.getDataValue('property_fee'))
                }
            },
            // 空调费
            ac_fee: STRING,
            // 电费
            electricity_fee: {
                type: DECIMAL(10,2),
                get() {
                    return getNumberValue(this.getDataValue('electricity_fee'))
                }
            },
            // 停车费
            parking_fee: {
                type: DECIMAL(10,2),
                get() {
                    return getNumberValue(this.getDataValue('parking_fee'))
                }
            },
            // 地铁信息
            subway_info: TEXT,
            // 公交信息
            bus_info: TEXT,
            // 商超配套
            commercial_facilities: TEXT,
            // 酒店配套
            hotel_facilities: TEXT,
            // 行政配套
            administrative_facilities: TEXT,
            // 项目配套
            project_facilities: TEXT,
            create_time: {
                type: DATE,
                get() {
                    return this.getDataValue('create_time') ? dayjs(this.getDataValue('create_time')).format('YYYY-MM-DD HH:mm:ss') : null;
                }
            },
            updated_time: {
                type: DATE,
                get() {
                    return this.getDataValue('updated_time') ? dayjs(this.getDataValue('updated_time')).format('YYYY-MM-DD HH:mm:ss') : null;
                }
            },
        },
        {
            tableName: 'office_building',
            timestamps: true,
            createdAt: 'create_time',
            updatedAt: 'updated_time'
        }
    );
    // 关联跟进人
    OfficeBuilding.associate = function() {
        app.model.OfficeBuilding.belongsTo(app.model.OfficeBuildingTemplate, { foreignKey: 'template_id', targetKey: 'id', as: 'template' });
        app.model.OfficeBuilding.hasMany(app.model.HouseFollowup, { foreignKey: 'office_building_id', targetKey: 'id', as: 'followupList' });
    }
    return OfficeBuilding;
};
